#include<iostream>
using namespace std;
#include"LinkList.h"

//指定的输出函数
void Print(const int& c)
{
	cout << c << "  ";
}

int main()
{
	int e;	//缓存表中数据
	int n;	//表长
	int item;	//表中数据

	LinkList<int> numbers;	//创建单链表

	//输入表的长度
	cout << "输入要创建的表的长度:";
	cin >> n;

	//存入数据
	cout << "输入表值:";
	for (int i = 0; i < n; i++)
	{
		cin >> item;
		numbers.Append(item);
	}

	//遍历表
	cout << "遍历表:";
	numbers.Traverse(Print);
	cout << endl;

	//表的长度
	cout << "表的长度:" << numbers.Length() << endl;

	//表是否为空？
	cout << "表是否为空？";
	if (numbers.IsEmpty())
		cout << "是";
	else
		cout << "否";
	cout << endl;

	//查找符合数据为2的元素位置
	cout << "查找符合数据为2的元素位置:" << numbers.LocateElem(2) << endl;

	//插入元素在表中
	cout << "在表中第二个位置插入数据(5):";
	numbers.Insert(5, 2);
	numbers.Traverse(Print);
	cout << endl;

	//删除表中元素
	cout << "删除第一个元素:";
	numbers.Delete(e, 1);
	numbers.Traverse(Print);
	cout << endl;

	//取表中3号元素值
	if (numbers.GetElem(e, 3))
		cout << "表中3号元素值:" << e << endl;
	else
		cout << "发生未知错误！" << endl;
	e = NULL;

	//在第4个位置存入数据(45)
	if (numbers.SetElem(45, 4))
	{
		if (numbers.GetElem(e, 4))
		{
			cout << "改表中4号元素值为:" << e << " --新表为:";
			numbers.Traverse(Print);
		}
		else
			cout << "取值过程中发生错误！" << endl;
		e = NULL;
	}
	else
		cout << "存入数据过程中发生错误！" << endl;

	//倒置
	numbers.Inverse();
	cout<<endl<<"倒置为：";
	numbers.Traverse(Print);
	
	return 0;
}